#pragma once

#include "Core.h"
#include "Events/Event.h"
#include "Core/Timestep.h"
/*
 * layer概念是层，可以有多个层，每个层会逐级执行update方法,
 * */
namespace Hazel{
    class Layer{
    public:
        Layer(const std::string& name ="Layer");
        virtual ~Layer() = default;;

        virtual void OnAttach(){};
        virtual void OnDetach(){};
        virtual void OnUpdate(Timestep ts){};
        virtual void OnImGuiRender()  = 0;
        virtual void OnEvent(Event& event){};
        //内联函数，内容少,频繁调用的话可以使用inline关键字
        // 函数加const 意思就是这个函数不可以修改当前类的成员变量
        inline const std::string& GetName() const {return m_DebugName;}
    protected:
        std::string m_DebugName;
    };
}